
# -*- coding: utf-8 -*-

from django import forms
from comunidadcyt.Publicaciones.models import Conferencias, Libros, Revistas,ReportesTecnicos,Tesis,Papers, Autores_de_publicaciones
from comunidadcyt.departamentos.models import Departamentos
from comunidadcyt.proyectos.models import Proyectos
from comunidadcyt.gruposDeInvestigacion.models import GruposDeInvestigacion as Grupos
from django.utils.encoding import force_unicode
from django.forms.widgets import Select, SelectMultiple
from comunidadcyt.Registration_Users.models import User
from django.forms import ModelMultipleChoiceField, ModelChoiceField
from django.db.models import Q

class choiceMultipleName(ModelMultipleChoiceField):
    def label_from_instance(self, obj):
        name = force_unicode(obj.first_name +' '+ obj.last_name)
        return name
    
class choiceName(ModelChoiceField):
    def label_from_instance(self, obj):
        name = force_unicode(obj.first_name +' '+ obj.last_name)
        return name
    
class LibrosForms(forms.ModelForm):
    def __init__(self, user, *args, **kwargs):
        super(LibrosForms, self).__init__(*args, **kwargs)
        self.fields['grupos'].queryset=Grupos.objects.filter(Q(Miembros__id__exact=user.id) | Q(Responsables__id__exact=user.id)).distinct().order_by('Nombre_grupo')
        self.fields['grupos'].help_text='Grupos de Investigación vinculados a la Publicación'
        self.fields['departamentos'].queryset=Departamentos.objects.all().order_by('Nombre_departamento')
        self.fields['departamentos'].help_text='Departamentos vinculados a la Publicación'
        self.fields['proyectos'].queryset=Proyectos.objects.filter(Q(Miembros__id__exact=user.id) | Q(Responsables__id__exact=user.id)).distinct().order_by('Nombre_proyecto')
        self.fields['proyectos'].help_text='Proyectos vinculados a la Publicación'

    class Meta:
        model = Libros
        exclude = ('creado_por',)
        widgets =   {
                     'privacidad': Select(attrs={'id':'privacidad_libros'}),
                     'grupos': SelectMultiple(attrs={'id':'grupos_select_libros'}),
                     'departamentos': SelectMultiple(attrs={'id':'departamentos_select_libros'}),
                     'proyectos': SelectMultiple(attrs={'id':'proyectos_select_libros'}),
                    }

        
class ConferenciasForms(forms.ModelForm):
    def __init__(self, user, *args, **kwargs):
        super(ConferenciasForms, self).__init__(*args, **kwargs)
        self.fields['grupos'].queryset=Grupos.objects.filter(Q(Miembros__id__exact=user.id) | Q(Responsables__id__exact=user.id)).distinct().order_by('Nombre_grupo')
        self.fields['grupos'].help_text='Grupos de Investigación vinculados a la Publicación'
        self.fields['departamentos'].queryset=Departamentos.objects.all().order_by('Nombre_departamento')
        self.fields['departamentos'].help_text='Departamentos vinculados a la Publicación'
        self.fields['proyectos'].queryset=Proyectos.objects.filter(Q(Miembros__id__exact=user.id) | Q(Responsables__id__exact=user.id)).distinct().order_by('Nombre_proyecto')
        self.fields['proyectos'].help_text='Proyectos vinculados a la Publicación'

    class Meta:
        model = Conferencias
        exclude = ('creado_por',)
        widgets =   {
                     'privacidad': Select(attrs={'id':'privacidad_conferencias'}),
                     'grupos': SelectMultiple(attrs={'id':'grupos_select_conferencias'}),
                     'departamentos': SelectMultiple(attrs={'id':'departamentos_select_conferencias'}),
                     'proyectos': SelectMultiple(attrs={'id':'proyectos_select_conferencias'}),
                    }    

class RevistasForms(forms.ModelForm):  
    def __init__(self, user, *args, **kwargs):
        super(RevistasForms, self).__init__(*args, **kwargs)
        self.fields['grupos'].queryset=Grupos.objects.filter(Q(Miembros__id__exact=user.id) | Q(Responsables__id__exact=user.id)).distinct().order_by('Nombre_grupo')
        self.fields['grupos'].help_text='Grupos de Investigación vinculados a la Publicación'
        self.fields['departamentos'].queryset=Departamentos.objects.filter(Responsables__id__exact=user.id).distinct().order_by('Nombre_departamento')
        self.fields['departamentos'].help_text='Departamentos vinculados a la Publicación'
        self.fields['proyectos'].queryset=Proyectos.objects.filter(Q(Miembros__id__exact=user.id) | Q(Responsables__id__exact=user.id)).distinct().order_by('Nombre_proyecto')
        self.fields['proyectos'].help_text='Proyectos vinculados a la Publicación'

    class Meta:
        model = Revistas
        exclude = ('creado_por',)
        widgets =   {
                     'privacidad': Select(attrs={'id':'privacidad_revistas'}),
                     'grupos': SelectMultiple(attrs={'id':'grupos_select_revistas'}),
                     'departamentos': SelectMultiple(attrs={'id':'departamentos_select_revistas'}),
                     'proyectos': SelectMultiple(attrs={'id':'proyectos_select_revistas'}),
                    }
       
            
class TesisForms(forms.ModelForm):
    def __init__(self, user, *args, **kwargs):
        super(TesisForms, self).__init__(*args, **kwargs)
        self.fields['grupos'].queryset=Grupos.objects.filter(Q(Miembros__id__exact=user.id) | Q(Responsables__id__exact=user.id)).distinct().order_by('Nombre_grupo')
        self.fields['grupos'].help_text='Grupos de Investigación vinculados a la Publicación'
        self.fields['departamentos'].queryset=Departamentos.objects.all().order_by('Nombre_departamento')
        self.fields['departamentos'].help_text='Departamentos vinculados a la Publicación'
        self.fields['proyectos'].queryset=Proyectos.objects.filter(Q(Miembros__id__exact=user.id) | Q(Responsables__id__exact=user.id)).distinct().order_by('Nombre_proyecto')
        self.fields['proyectos'].help_text='Proyectos vinculados a la Publicación'
        #self.fields['tutores']=choiceMultipleName(queryset=User.objects.all().order_by('first_name', 'last_name'),widget=SelectMultiple(attrs={'id':'tutores_select_tesis'}),label="Tutores",help_text=None)
        
    class Meta:
        model = Tesis
        exclude = ('creado_por',)
        widgets =   {
                     'privacidad': Select(attrs={'id':'privacidad_tesis'}),
                     'grupos': SelectMultiple(attrs={'id':'grupos_select_tesis'}),
                     'departamentos': SelectMultiple(attrs={'id':'departamentos_select_tesis'}),
                     'proyectos': SelectMultiple(attrs={'id':'proyectos_select_tesis'}),
                    }


class ReportesTecnicosForms(forms.ModelForm):  
    def __init__(self, user, *args, **kwargs):
        super(ReportesTecnicosForms, self).__init__(*args, **kwargs)
        self.fields['grupos'].queryset=Grupos.objects.filter(Q(Miembros__id__exact=user.id) | Q(Responsables__id__exact=user.id)).distinct().order_by('Nombre_grupo')
        self.fields['grupos'].help_text='Grupos de Investigación vinculados a la Publicación'
        self.fields['departamentos'].queryset=Departamentos.objects.all().order_by('Nombre_departamento')
        self.fields['departamentos'].help_text='Departamentos vinculados a la Publicación'
        self.fields['proyectos'].queryset=Proyectos.objects.filter(Q(Miembros__id__exact=user.id) | Q(Responsables__id__exact=user.id)).distinct().order_by('Nombre_proyecto')
        self.fields['proyectos'].help_text='Proyectos vinculados a la Publicación'

    class Meta:
        model = ReportesTecnicos
        exclude = ('creado_por',)
        widgets =   {
                     'privacidad': Select(attrs={'id':'privacidad_reportes'}),
                     'grupos': SelectMultiple(attrs={'id':'grupos_select_reportes'}),
                     'departamentos': SelectMultiple(attrs={'id':'departamentos_select_reportes'}),
                     'proyectos': SelectMultiple(attrs={'id':'proyectos_select_reportes'}),
                    }
        
                
class PapersForms(forms.ModelForm):   
    def __init__(self, user, *args, **kwargs):
        super(PapersForms, self).__init__(*args, **kwargs)
        self.fields['grupos'].queryset=Grupos.objects.filter(Q(Miembros__id__exact=user.id) | Q(Responsables__id__exact=user.id)).distinct().order_by('Nombre_grupo')
        self.fields['grupos'].help_text='Grupos de Investigación vinculados a la Publicación'
        self.fields['departamentos'].queryset=Departamentos.objects.all().order_by('Nombre_departamento')
        self.fields['departamentos'].help_text='Departamentos vinculados a la Publicación'
        self.fields['proyectos'].queryset=Proyectos.objects.filter(Q(Miembros__id__exact=user.id) | Q(Responsables__id__exact=user.id)).distinct().order_by('Nombre_proyecto')
        self.fields['proyectos'].help_text='Proyectos vinculados a la Publicación'

    class Meta:
        model = Papers
        exclude = ('creado_por',)
        widgets =   {
                     'privacidad': Select(attrs={'id':'privacidad_papers'}),
                     'grupos': SelectMultiple(attrs={'id':'grupos_select_papers'}),
                     'departamentos': SelectMultiple(attrs={'id':'departamentos_select_papers'}),
                     'proyectos': SelectMultiple(attrs={'id':'proyectos_select_papers'}),
                    }
        

class crearAutoresForms(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(crearAutoresForms, self).__init__(*args, **kwargs)
        self.fields.keyOrder = ['tipo', 'autor_interno','autor_externo','pos',]
        self.fields['autor_interno']=choiceName(queryset=User.objects.all().order_by('first_name', 'last_name'),required=False)
        self.fields['autor_interno'].empty_label=None
        self.fields['pos'].label = "Posición"

    class Meta:
        model = Autores_de_publicaciones


class choiceAutores(ModelMultipleChoiceField):
    def label_from_instance(self, obj):
        name = force_unicode(obj.pos.__str__() + '- ' + obj.__str__())
        return name 
    
class listarAutoresForms(forms.Form):
    cargados = choiceAutores(queryset=Autores_de_publicaciones.objects.none(),help_text='Seleccione los que quiere eliminar')
    
    def __init__(self, pub_obj = None, *args, **kwargs):
        super(listarAutoresForms, self).__init__(*args, **kwargs)
        if pub_obj is None:
            self.fields['cargados'].queryset=Autores_de_publicaciones.objects.none()
        else:
            self.fields['cargados'].queryset=pub_obj.autores.all()

TIPOS_PUB_CHOICES = (
    ('Todos','Todos'),
    ('Conferencia','Conferencia'),
    ('Libro','Libro'),
    ('Paper','Paper'),
    ('Reporte Tecnico','Reporte Tecnico'),
    ('Revista','Revista'),
    ('Tesis','Tesis'),
)

class BuscarPubForm(forms.Form):
    autor = forms.CharField(max_length=100, label="Autor:")
    titulo = forms.CharField(max_length=200, label="Título")
    tipo = forms.ChoiceField(choices=TIPOS_PUB_CHOICES, label="Tipo", help_text="")
